-
Notifications
You must be signed in to change notification settings - Fork 30.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
child_process: validate strings in exec and spawn #56148
base: main
Are you sure you want to change the base?
Conversation
358bd79
to
40a0a9f
Compare
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #56148 +/- ##
==========================================
+ Coverage 87.99% 88.53% +0.54%
==========================================
Files 656 657 +1
Lines 188999 189882 +883
Branches 35981 36461 +480
==========================================
+ Hits 166301 168120 +1819
+ Misses 15865 14970 -895
+ Partials 6833 6792 -41
|
lib/child_process.js
Outdated
// Set the shell, switches, and commands. | ||
if (process.platform === 'win32') { | ||
if (typeof options.shell === 'string') | ||
file = options.shell; | ||
command = options.shell; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this change makes the code more confusing, IMO it makes more sense to keep file
for the shell executable and command
for the actual command.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
changing it back now. Do you still agree on changing the documentation in the code to reflect the terminology actually used in the documentation in .md files?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you clarify? I'm not sure I follow
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is what I mean:
https://nodejs.org/api/child_process.html#child_processspawncommand-args-options
in the documentation, the first parameter is called "command" (which makes sense), while in the code it is called "file" , which is confusing.
The initial commit I did which I just reverted, also changed the name of the parameters in the code to match the proper name used in the documentation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure "command" is much better than "file" tbh. According to https://stackoverflow.com/a/2051031, ISO C11 refers to it as the "program name". I would call it "child process argv0".
In any case, let's not do that in this PR, it can be its own PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you please remove all the unrelated changes? It makes the PR hard to review. Please only include changes that are necessary to make the added test pass, and all the other changes should be made in a separate PR.
40a0a9f
to
18ddc47
Compare
18ddc47
to
6d02bc8
Compare
6d02bc8
to
0a84382
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like the added test pass on main
, meaning either the change in lib/
is only a refactor, or we are not adding sufficient coverage to avoid regression.
it was mainly refactoring because, for example, when calling |
I don't think it's the right approach, we should optimize for the happy path, where there are no error thrown. IIUC, with this change we would be checking twice if the arguments are valid, so in order to save some cycles we should not land this. |
0a84382
to
a3b5b1a
Compare
gotcha. I went in that direction because I noticed that was the case already. With the latest push all the validation is done down the line and only once |
I went through the
exec
,execFile
,spawn
,execSync
,execFileSync
andspawnSync
functions inchild_process
and edited all the functions to properly validate their string parameters